 package com.SparkCore.RDD.Operator.Transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}


/**
 *将数据根据指定的规则进行分组, 分区默认不变，但是数据会被打乱重新组合，我们将这样的操作称之为shuffle。极限情况下，数据可能被分在同一个分区中
 *一个组的数据在一个分区中，但是并不是说一个分区中只有一个组

 */
object Spark06_RDD_Operator_Transform_GroupBy {

  def main(args: Array[String]): Unit = {

    //创建环境
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sparkContext = new SparkContext(sparkConf)

    //创建RDD算子 -- groupBy
    val rdd = sparkContext.makeRDD(List(1, 2, 3, 4), 2)

    //groupBy 会把数据源中的每一个数据进行分组判断，根据返回的分组key进行分组
    //相同的key值的数据会放到一个组中
    def groupFunction(num : Int) : Int = {
      num % 2
    }

    val groupRDD: RDD[(Int, Iterable[Int])] = rdd.groupBy(groupFunction)

    groupRDD.collect().foreach(println)

    //关闭环境
    sparkContext.stop()
  }
}
